package com.zhiwei.codesecurity.common.utils;

import com.zhiwei.codesecurity.common.constants.Constant;
import com.zhiwei.codesecurity.common.domain.Param;
import com.zhiwei.codesecurity.service.redis.IJedisClientUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

@Service
public class RedisUtil {
    @Autowired
    private IJedisClientUserService jedisClientUserService;

    /**
     * 登录token保存时间
     */
    private static int loginExpire;

    static {
        String obj = ReloadAbleProperty.getProperty("redis.login.expire");
        loginExpire = null == obj ? Constant.LOGIN_EXPIRE : Integer.parseInt(obj);
    }

    /**
     * token保存到redis中
     * @param memberNo 用户id（用户数据分离后加上了systemType）
     * @param tokenId token
     * @param source 来源（ios和安卓统一为app）
     * @throws Exception
     */
    public void setTokenId(String memberNo, String tokenId, String source) {
        Param p = new Param();
        p.setBid(Constant.BID);
        p.setUid(Constant.PREFIX_LOGIN + "-" + memberNo);
        p.setTokenId(tokenId);
        p.setDate(new Date());
        p.setSource(source);
        jedisClientUserService.set(p);
    }

    /**
     * 删除token
     * @param memberNo 用户id（用户数据分离后加上了systemType）
     * @param tokenId token
     * @param source 来源（ios和安卓统一为app）
     * @throws Exception
     */
    public void delTokenId(String memberNo, String tokenId, String source)  {
        Param p = new Param();
        p.setBid(Constant.BID);
        p.setUid(Constant.PREFIX_LOGIN + "-" + memberNo);
        p.setTokenId(tokenId);
        p.setSource(source);
        jedisClientUserService.del(p);
    }

    /**
     * 获取token
     * @param memberNo 用户id（用户数据分离后加上了systemType）
     * @param tokenId token
     * @return
     * @throws Exception
     */
    public boolean getTokenId(String memberNo, String tokenId)  {
        Param p = new Param();
        p.setBid(Constant.BID);
        p.setUid(Constant.PREFIX_LOGIN + "-" + memberNo);
        p.setTokenId(tokenId);
        p.setDate(new Date());
        return jedisClientUserService.get(p, loginExpire);
    }

    /**
     * 延长token过期时间
     * @param memberNo 用户id（用户数据分离后加上了systemType）
     * @param tokenId token
     * @param source 来源（ios和安卓统一为app）
     * @throws Exception
     */
    public void delayToken(String memberNo, String tokenId, String source) {
        Param p = new Param();
        p.setBid(Constant.BID);
        p.setUid(Constant.PREFIX_LOGIN + "-" + memberNo);
        p.setTokenId(tokenId);
        p.setDate(new Date());
        p.setSource(source);
        jedisClientUserService.delayToken(p);
    }
}
